package com.campus.food.mapper;

import com.campus.food.model.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户Mapper接口
 * 
 * @author Claude3.7 Sonnet
 * @since 2025-05-29
 */
@Mapper
public interface UserMapper {
    
    /**
     * 根据ID查询用户
     */
    User selectById(@Param("id") Long id);
    
    /**
     * 根据用户名查询用户
     */
    User selectByUsername(@Param("username") String username);
    
    /**
     * 根据手机号查询用户
     */
    User selectByPhone(@Param("phone") String phone);
    
    /**
     * 根据邮箱查询用户
     */
    User selectByEmail(@Param("email") String email);
    
    /**
     * 插入用户
     */
    int insert(User user);
    
    /**
     * 更新用户信息
     */
    int updateById(User user);
    
    /**
     * 更新用户状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 更新最后登录时间
     */
    int updateLastLoginTime(@Param("id") Long id, @Param("lastLoginTime") LocalDateTime lastLoginTime);
    
    /**
     * 根据ID删除用户
     */
    int deleteById(@Param("id") Long id);
    
    /**
     * 分页查询用户列表
     */
    List<User> selectPage(@Param("offset") Integer offset, 
                         @Param("limit") Integer limit,
                         @Param("username") String username,
                         @Param("realName") String realName,
                         @Param("role") Integer role,
                         @Param("status") Integer status);
    
    /**
     * 查询用户总数
     */
    Long selectCount(@Param("username") String username,
                    @Param("realName") String realName,
                    @Param("role") Integer role,
                    @Param("status") Integer status);
    
    /**
     * 根据角色查询用户列表
     */
    List<User> selectByRole(@Param("role") Integer role);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(@Param("username") String username);
    
    /**
     * 检查手机号是否存在
     */
    boolean existsByPhone(@Param("phone") String phone);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(@Param("email") String email);
} 